from PIL import Image

def create_cube_uv_map(top_path, bottom_path, left_path, right_path, front_path, back_path, output_path):
    """
    创建一个立方体的UV贴图，将六张面图排列到一张图片上。

    Args:
        top_path (str): 顶部图片的路径。
        bottom_path (str): 底部图片的路径。
        left_path (str): 左侧图片的路径。
        right_path (str): 右侧图片的路径。
        front_path (str): 前面图片的路径。
        back_path (str): 后面图片的路径。
        output_path (str): 输出UV贴图的路径。
    """
    try:
        top_img = Image.open(top_path)
        bottom_img = Image.open(bottom_path)
        left_img = Image.open(left_path)
        right_img = Image.open(right_path)
        front_img = Image.open(front_path)
        back_img = Image.open(back_path)

        width, height = front_img.size  # 假设所有图片尺寸相同

        new_width = width * 4
        new_height = height * 3
        uv_map = Image.new('RGBA', (new_width, new_height))

        # 按照Blender默认的UV展开布局排列图片 (可能需要根据你的具体UV展开进行调整)
        # 这里假设的排列方式是：
        #    Top
        # Left Front Right Back
        #   Bottom

        uv_map.paste(top_img, (width, 0))         # Top
        uv_map.paste(left_img, (0, height))       # Left
        uv_map.paste(front_img, (width, height))   # Front
        uv_map.paste(right_img, (width * 2, height)) # Right
        uv_map.paste(back_img, (width * 3, height))  # Back
        uv_map.paste(bottom_img, (width, height * 2)) # Bottom

        uv_map.save(output_path)
        print(f"UV贴图已保存为: {output_path}")

    except FileNotFoundError as e:
        print(f"错误: 找不到文件 - {e}")
    except Exception as e:
        print(f"发生错误: {e}")

if __name__ == "__main__":
    create_cube_uv_map("top.png", "bottom.png", "left.png", "right.png", "front.png", "back.png", "grass_uv.png")